Java常见面试题:Set集合 您所在的位置:网站首页 set 0 Java常见面试题:Set集合

Java常见面试题:Set集合

2024-06-29 11:33| 来源: 网络整理| 查看: 265

Set集合

对于Set集合应该有一个基础的认识:Set集合本身只定义有不允许重复的存储。Set接口完整的继承了Collection接口,也就是说Set集合几乎与Collection的操作是对等的。

从实际的开发来看,大量使用到Set集合的框架只有Hibernate;还有一些批量删除的功能也是通过Set集合实现的,因为大部分情况下优先考虑的还是List接口。

对于Set接口最麻烦的问题不在于它的接口特点而在于子类特点,如果从开发者的角度来看,整个Set接口中有以下三个可能见到的子类:

1. HashSet:无序存放(1)打开源代码之后发现整个HashSet类里面存在有一个HashMap,但是很明显,没使用这个Map的Value,只使用了Key(HashMap的主要特点是key不能重复);(2)在HashSet类执行add()方法的时候发现是利用了Map接口中的put()实现的;(3)在整个存储过程之中存在有一个hashCode()的使用;(4)在内部的Node类处理时依然使用了equals()判断key与value内容。

2.TreeSet:发现使用的是Map集合(SortedMap接口子类);(1) 里面存放的是TreeMap,TreeMap的特点在于所有的key都是可以排序的,排序的依据是Comparable(往往会忽略掉Comparator);(2) 在TreeMap之中对于大小的关系判断强制使用了Comparable接口中的compareTo()完成。

3.LinkedHashSet:如果这个时候需要进行连续的保存(FIFO),就可以使用另外一个子类。它之所以可以进行顺序保存,是因为在进行存储的时候采用的是链表形式完成的。

范例:HashSet子类

image.pngimage.pngimage.pngimage.pngimage.png

这个时候之所以没有区分重复元素,是因为这个子类里面并没有提供一个与之相符合的hashCode()和equals()方法。

范例:HashSet实现重复元素的不保存

image.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.png

如果希望保存的为增加顺序,那么可以更换子类。

image.png

TreeSet中保存的数据都必须是Comparable接口的子类。

范例:使用TreeSet

image.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngimage.pngTreeSet的使用必须依靠Comparable,在实际开发之中即便使用了集合保存所有的查询结果,也很少出现重复的判断,因为数据表的主键不会重复。也就证明这个时候是否进行重复元素的判断是没有任何意义的。所以在开发里面最常用的一个子类是HashSet,只需要判断重复,而且大部分使用的情况是里面保存的只是String、Integer类,很少会去保存一个对象。

更多专业知识,面试技巧就在阿里云开发者社区,持续更新中……感谢浏览~本内容来源于阿里云大学-Java面试技巧



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有